
#列表的切片操作

#1我们通过下标只可以取出其中1个元素，而我们可以通过[:]来取出多个元素
a=[1,2,3,4]
print(a[1:3])#注意这里是左闭右开的。并且里面的数字代表的是下标
print(a[1:])#打印 2 3 4
print(a[:3])#打印1 2 3
print(a[:-1])#打印1 2 3
print(a[:])#打印1 2 3 4


#2注意 还有带有步长的切片操作
b=[1,2,3,4,5,6,7,8,9,0]
print(b[::1])#答案是1 2 3 4 5 6 7 8 9 0
print(b[::2])#答案是1 3 5 7 9
print(b[::3])#答案是1 4 7 0
#如果是按照下面这样写
print(b[1:-1:2])#答案是2 4 6 8，这里一定注意1代表的是下标
#那如果这样写呢？
print(b[::-1])#非常重要！他代表从后往前去取，步长为1
            #所以答案是 0 9 8 7 6 5 4 3 2 1

#如果越界了也不会报错！！
print(b[1:100])#它不会报错，只是会尽可能的将符合条件的元素取到




#3列表的遍历操作
#第1种
a=[1,2,3,4,5]
for x in a:
    print(x)

#第2种
b=[6,5,4,3,2]
for y in range(0,len(b)):
    print(b[y])

#4插入元素
#尾插使用append
arr=[1,2,3,4,5]
# arr.append='hello'
#上面这种写法不正确，应该按照下面这种来写
arr.append('hello')
print(arr)

#想随意的插入就用insert(a,b),这个a代表的是下标
p=[1,2,3,4]
p.insert(2,'apple')
print(p)

#5 查找元素用的是in,找到了就返回True，没找到就返回False
q=[1,2,3,4,5,6,7,8,9]
print(2 in q)
print(99 in q)


#6 删除元素
#如果直接使用pop，那就是尾删
v=[3,4,5,6,7,8,9]
v.pop()
print(v)

#如果想删除指定位置的元素
w=[3,4,5,6,7,8,9]
w.pop(2)#代表删除下标为2的元素
print(w)

#如果想删除指定值
y=[33,25,76,88,94]
y.remove(88)
print(y)


#7列表的拼接
#第1种 是直接用+号
a=[1,2,3,4]
b=[5,6,7]
print(a+b)

#第2种是 使用到extend，比如 a.extend(b)代表的是将b拼接到a的末尾
#并且，拼接之后a是有所改变的，b不会改变。注意上面的写法
#假如：
x=[3,2,5,7]
y=[6,6,6]
x.extend(y)
print(x)
print(y)


#8元组
#之前有说过，元组是不可以被修改的

#首先是创建元组 有2种方式
#第1种
a=()
print(type(a))


#第2种
b=tuple()
print(type(b))

#元组和列表一样，它里面也是可以包含任意类型的
a=(1,2,3,'hello')
print(a)

#同样也可以通过下标来访问元组的元素，下标也可以是负数
r=[33,44,55,66,77]
print(r[-1])

#元组里，可以来访问里面的元素，但是不可以对其进行修改

#当然，也是可以使用到切片的
t=[43,54,65,76,87,98,23,34,45,56,57]
print(t[2:7:2])


#重点重点重点!!!除了会用in来查找这个元素，也是可以用到index来查找这个元素的下标
#依然使用到上面的t元组
print(56 in t)
#如果还想使用index来查找这个元素的下标
print(t.index(76))


#也可以拼接
u=(1,2,3,4,5)
v=(2,2,2)
print(u+v)



#9字典
#字典其实就是一种 键值对 的数据结构，本质上是哈希表


#创建一个字典
#方法1
a={}
print(type(a))

#方法2
b=dict()
print(type(b))


#初始化：以键值对的形式来进行初始化
#注意 冒号前面就是键 冒号后面是值
a={'id':1,'name':'zhangsan'}


#上面这种，如果 键值对 多了，那就会都挤在一行，所以一般按照下面这种写法来写
b={
    'id':1,
    'name':'zhangsan'

}
print(b)


#在字典中查找
#第1种查找是返回True和False
stu={
    'id':2331052050,
    'name':'wangxiaomei'

}

print('id' in stu)
print('tele' in stu)

#第2种查找是返回查找的内容
#注意 下面查找时的符号是中括号，虽然字典是花括号{}，但是查找具体数值时是用[]

student={
    'id':2331052011,
    'name':'zhangzhang',
    'address':'xinjiang'
}

print(student['id'])#注意这里的括号是[]
print(student['address'])


#新增或修改方法也是和查找的第2种很像

#下面这个是新增，因为没有，所以新增
people={
    'id':123,
    'name':'xiaohongmao',
    'tele':13139876543

}
people['score']=999
print(people)

#下面这个是修改
boy={
    'id':123,
    'name':'xiaohongmao',
    'tele':13139876543,
    'score':234
}
                             #键值对 键是key  值是value
boy['score']=666#这里注意！！！也就是说 字典名[key]就代表的是 键值对 的值
print(boy)

#现在来进行删除操作，用到pop

#本来我还在想pop()括号里什么都不写，会不会只删除字典的最后一个，结果报错
#print(boy.pop())

#那么
boy.pop('name')#而且这里要注意，这里的删除pop的前面会加上boy.  与之前列表和元组的删除不太一样
print(boy)


#总结
#插入
#尾插append  insert(下标，插入元素)

#删除
#尾删pop()  删除指定下标元素pop(下标数字)  remove(要被删除的那个数值/内容)

#拼接
# 使用加号+     a.extend(b)代表把b拼接到a后面，并且a改变了，b未改变

#查找
#  内容 in 数组名        数组名.index(那个元素/内容)，查找出的结果是该元素的下标


#字典的遍历
#回到之前的内容，键值对的键是key 值是value
#对字典进行一个遍历

#方法1
teacher={
    'id':1234,
    'name':'xiaolan',
    'score':99

}
#上面已经创建好了一个字典，现在开始遍历
for key in teacher:
    print(key,teacher[key])


#方法2
print(student.keys())#这样可以遍历到每一个key

#方法3
print(student.values())#这样可以遍历到每一个value


#10使用hash函数来计算出一个变量的哈希值
print(hash(1))
print(hash(3.14))
print(hash(True))
print(hash('hello'))
print(hash((1,2,3)))#注意这里是元组的形式，它是不可变的，所以有哈希值


#有的类型是不能计算哈希值的
#比如 列表 list
print(hash([1,2,3]))

#比如字典 dict
print({})
#总结一下，也就是 不可变的才会有哈希值
#            而可变的，可修改的就不会有哈希值(比如列表，字典)



































